package com.example.music08.utils;

import android.media.MediaPlayer;
import android.widget.ImageView;
import android.widget.PopupWindow;

import com.example.music08.R;
import com.example.music08.entity.Music;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.List;
import java.util.Random;

//音乐播放器工具类
public class MusicUtils {
    private MusicUtils(){}
    private static MusicUtils musicUtils;
    public static MusicUtils getInstance(){
        if(musicUtils==null){
            musicUtils=new MusicUtils();
        }
        return musicUtils;
    }
    private static MediaPlayer mp = new MediaPlayer();//音乐播放器的类

    private List<Music.DataBean> list;//用来加载所有要播放歌曲的列表---什么时候添加数据，   在网络请求完成时   加载到数据，本地数据时
    private int index;//用来记录当前播放歌曲的下标----点击上一首 或者下一首的时候有用
    private int playMode;//播放模式 ---调整播放歌曲的顺序时使用  0---顺序 1---2---

    public List<Music.DataBean> getList() {
        return list;
    }

    public void setList(List<Music.DataBean> list) {
        this.list = list;
    }

    public int getIndex() {
        return index;
    }

    public void setIndex(int index) {
        this.index = index;
    }

    public int getPlayMode() {
        return playMode;
    }

    public void setPlayMode(int playMode) {
        this.playMode = playMode;
    }
    //封装常见的按钮图标---点击可播放   点击图标播放或暂停   点上一首   点下一首   点快进   点快退
    public void play(int i){
        index = i;
        mp.reset();
        try {
            mp.setDataSource(list.get(index).getData());
            mp.prepareAsync();
            //播放完毕的监听
            mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                @Override
                public void onCompletion(MediaPlayer mp) {
                    //一会调用下一首的方法
                }
            });
            mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                @Override
                public void onPrepared(MediaPlayer mp) {
                    mp.start();
                }
            });
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
    public void pOrp(ImageView imageView){
        if(mp.isPlaying()){
            mp.pause();
            imageView.setImageResource(R.drawable.baseline_play_circle_outline_24);
        }else{
            mp.start();
            imageView.setImageResource(R.drawable.baseline_pause_circle_outline_24);
        }
    }

    public void pre(){
        if(playMode==0){//顺序循环
            if(index==0){
                index = list.size()-1;
            }else {
                index--;
            }
        }else if(playMode==1){//随机播放
            index = new Random().nextInt(list.size()-1);
        }
        //单曲循环，下标不发生改变
        play(index);
    }
    public void next(){
        if(playMode==0){
            if(index==list.size()-1){
                index=0;
            }else{
                index++;
            }
        }else if(playMode==1){
            index = new Random().nextInt(list.size()-1);
        }
        play(index);
    }

    public void jin(){
        int position = mp.getCurrentPosition();
        mp.seekTo(position+=5000);
    }

    public void tui(){
        int position = mp.getCurrentPosition();
        mp.seekTo(position-=5000);
    }

    //更新通知上的图标，会用到当前是什么状态
    public boolean isPlay(){
        return mp.isPlaying();
    }
    //发出系统通知时，开飞行模式，暂停音乐   关飞行模式  音乐继续
    public void start(ImageView imageView){
        mp.start();
        imageView.setImageResource(R.drawable.baseline_pause_circle_outline_24);
    }
    public void pause(ImageView imageView){
        mp.pause();
        imageView.setImageResource(R.drawable.baseline_play_circle_outline_24);
    }
    //进度条--最大值 当前值  退拽
    public int getMax(){
        return mp.getDuration();
    }
    public int getProgress(){
        return mp.getCurrentPosition();
    }
    public String getCur(){
        SimpleDateFormat format = new SimpleDateFormat("mm:ss");
        return format.format(mp.getCurrentPosition());
    }
    public String getDur(){
        SimpleDateFormat format = new SimpleDateFormat("mm:ss");
        return format.format(mp.getDuration());
    }

    public void seekTo(int time){
        mp.seekTo(time);
    }
    //跳转到详情界面 需要展示歌曲名称 歌手名称 歌曲图片 歌词     data(下载用)
    public String getName(){
        return list.get(index).getName();
    }
    public String getSinger(){
        return list.get(index).getSinger();
    }
    public String getPicUrl(){
        return list.get(index).getPicUrl();
    }
    public String getLrc(){
        return list.get(index).getLrc();
    }
    public String getData(){
        return list.get(index).getData();
    }
    //获取当前播放音乐的id
    public int getId(){
        return list.get(index).getId();
    }
    //获取当前播放音乐的实体类
    public Music.DataBean getDataBean(){
        return list.get(index);
    }

}
